package cn.stuManagement.student;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import cn.stum.util.GetCommand;
import cn.stum.util.SysIntial;

/*
 * TODO：
 * Scanner 的 nextInt() 如果输入非整型数据会报异常
 * 因为用了Integer表示性别，所以输入的时候经常弄错 
 * 
 */
public class TestDriver {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		test08();
		//test07();
		
	}
	
	// 输出同学信息
		public static void printOther(List<Map<String, Object>> listOthers) {
			boolean flag = true;
			// 测试的时候输出，运行的时候不输出

			for (Map<String, Object> user : listOthers) {
				Set<Map.Entry<String, Object>> uss = user.entrySet();
				if (flag == true) {
					for (Entry<String, Object> entry : uss) {
						System.out.print(entry.getKey() + "\t");
					}
					System.out.println();
					flag = false;
				}
				for (Entry<String, Object> entry : uss) {
					System.out.print(entry.getValue() + "\t");
				}
				System.out.println();

			}
		}


	
	
	// 测试留言板信息
	@SuppressWarnings("unchecked")
	private static void test08() {
		// 接收留言信息
		List<Message> listm = new ArrayList<>();
		File filem = new File("src/message.txt");
		listm = SysIntial.listsALL(filem);
		
		for (Message message : listm) {
			System.out.println(message);
		}
//		
		
		
		// 接收学生信息
		List<Student> lists= new ArrayList<>();
		File files = new File("src/student.txt");
		lists = SysIntial.listsALL(files);
		
		for (Student student : lists) {
			System.out.println(student);
		}
		
		
//		
//		// 留言板对象
		List<Map<String, Object>> listb = new ArrayList<>();
//		
//		//获取留言板信息
		listb = getMessageBoard(listm, lists);
		
		if(listb == null) {
			System.out.println("listb空");
		}else {
		for (Map<String, Object> map : listb) {
			
			Set<Entry<String,Object>> set1 = map.entrySet();
			for (Entry<String, Object> entry : set1) {
				System.out.println(entry);
			}
		}
		
		//输出留言板
		printOther(listb);
		}

	}

	// 获取留言板信息
	public static List<Map<String, Object>> getMessageBoard(List<Message> listm, List<Student> lists) {
		// 实例化留言板对象
		List<Map<String, Object>> listboard = new ArrayList<>();
		// 接收对方的姓名
		List<Student> opposite = new ArrayList<>();

		// 转存的map集合
		Map<String, Object> mapmessage = new LinkedHashMap<>();
		// 查找对方姓名
		Map<String, Object> mapFriend = new LinkedHashMap<>();
		// 遍历留言列表
		for (Message mes : listm) {
			// 如果是发给自己的
			if (mes.getToID().equals("103107")) {
				// 如果我是收件人

				mapFriend.put("userID", mes.getFromID());
				opposite = SysIntial.listCondition(lists, mapFriend);
				if (opposite.size() == 1) {
					for (Student student : opposite) {
						mapmessage.put("留言状态", "收到的留言");
						mapmessage.put("发送时间:", mes.getDate());
						mapmessage.put("来自:", student.getUserName());
						mapmessage.put("留言内容：", mes.getContent());
						listboard.add(mapmessage);
					}
				} else {
					System.out.println("ID重复，请联系老师处理");
					break;
				}

			} else if (mes.getFromID().equals("103107")) {
				// 如果我是发件人
				mapFriend.put("userID", mes.getToID());
				opposite = SysIntial.listCondition(lists, mapFriend);
				if (opposite.size() == 1) {
					for (Student student : opposite) {
						mapmessage.put("留言状态", "发送的留言");
						mapmessage.put("发送时间:", mes.getDate());
						mapmessage.put("发送至:", student.getUserName());
						mapmessage.put("留言内容：", mes.getContent());
						listboard.add(mapmessage);
					}
				} else {
					System.out.println("ID重复，请联系老师处理");
					break;
				}
			}

		}
		if (listboard == null || listboard.size() == 0) {
			return null;
		} else {
			// 返回留言链表
			return listboard;
		}
	}

	
	
	
	

	// 添加留言板信息
		@SuppressWarnings("unchecked")
		private static void test09() {
			// 接收留言信息
			List<Message> listm = new ArrayList<>();
			File filem = new File("src/message1.txt");
			listm = SysIntial.listsALL(filem);
			
			Message me1 = new Message();
			me1.setFromID("101010");
			me1.setToID("102011");
			me1.setContent("10 to 20 ???");
			
			listm.add(me1);
			
			Message me2 = new Message();
			me2.setFromID("109800");
			me2.setToID("102210");
			me2.setContent("how are you ?");
			listm.add(me2);
			
			Message me3 = new Message();
			me3.setFromID("102100");
			me3.setToID("100911");
			me3.setContent("今天天气挺好");
			listm.add(me3);
			
			for (Message message : listm) {
				System.out.println(message);
			}
			
			
//			SysIntial.saveAll(listm, filem);
//			System.out.println("保存到文件成功");
//			System.out.println("输出文件中的信息");
//			listm = SysIntial.listsALL(filem);
//			for (Message message : listm) {
//				System.out.println(message);
//			}
//			
		}
	
	
	
	
	/**
	 * 给留言板添加东西
	 */
	@SuppressWarnings("unchecked")
	private static void test07() {
		// 初始化列表及文件信息
		// 学生数据库
		List<Student> listStu = new ArrayList<>();
		// 好友数据库
		List<Friend> listFriend = new ArrayList<>();
		// 留言库
		List<Message> listm = new ArrayList<>();
		// 存储学生信息的文件
		File file = new File("src/student.txt");
		// 存储好友信息的文件
		File fileFriend = new File("src/friend.txt");
		// 留言的文件
		File fileMessage = new File("src/message.txt");

		 Message mes1 = new Message();
		 mes1.setFromID("103107");
		 mes1.setToID("103108");
		 mes1.setDate(new Date(System.currentTimeMillis()));
		 mes1.setState("send");
		 mes1.setContent("hello what can i do for you?");
		 mes1.setMessageID(String.valueOf(System.currentTimeMillis()+1));
		 listm.add(mes1);
		 Message mes2 = new Message();
		 mes2.setFromID("103107");
		 mes2.setToID("103106");
		 mes2.setDate(new Date(System.currentTimeMillis()));
		 mes2.setState("rec");
		 mes2.setContent("please give me some paper");
		 mes2.setMessageID(String.valueOf(System.currentTimeMillis()+10));
		 listm.add(mes2);
		 Message mes3 = new Message();
		 mes3.setFromID("103106");
		 mes3.setToID("101307");
		 mes3.setDate(new Date(System.currentTimeMillis()));
		 mes3.setState("send");
		 mes3.setContent("hello ye2!~~~~~~~");
		 mes3.setMessageID(String.valueOf(System.currentTimeMillis()+100));
		 listm.add(mes3);
		 //将数据存储到文件中
		 SysIntial.saveAll(listm, fileMessage);
		 for (Message message : listm) {
		 System.out.println(message);
		 }
//		 读入学生数据
		 listStu = SysIntial.listsALL(file);
//		 读入好友关系数据
		 listFriend = SysIntial.listsALL(fileFriend);
//		 读入留言信息
		listm = SysIntial.listsALL(fileMessage);
		 //完全输出学生信息
		 System.out.println("学生信息列表：");
		 for (Student student : listStu) {
		
		 System.out.println(student);
		 }
		if (listm != null) {
			for (Message message : listm) {
				System.out.println(message);
			}
		} else {
			System.out.println("数据为空");
		}
	}

	@SuppressWarnings("unchecked")
	private static void test06() {

		// 初始化列表及文件信息
		List<Student> listStu = new ArrayList<>();
		List<Friend> listFriend = new ArrayList<>();

		// 存储学生信息的文件
		File file = new File("src/student.txt");
		// 存储好友信息的文件
		File fileFriend = new File("src/friend.txt");

		// 读入学生数据
		listStu = SysIntial.listsALL(file);
		System.out.println("学生信息列表：");
		if (listStu != null) {
			for (Student student : listStu) {

				System.out.println(student);
			}
		}
		Friend f1 = new Friend("1001", "101300", "101301", "ye2", "Y");
		Friend f2 = new Friend("1002", "101300", "101401", "ye2", "Y");
		listFriend.add(f1);
		listFriend.add(f2);
		// 将这两条数据写到文件里
		SysIntial.saveAll(listFriend, fileFriend);
		System.out.println("保存成功");

		// 读入好友关系数据
		listFriend = SysIntial.listsALL(fileFriend);
		if (listFriend != null) {

			for (Friend friend : listFriend) {
				System.out.println(friend);
			}
		}
		System.out.println("输出成功");

		// 登录系统

	}

	/*
	 * 测试学生类 获取好友关系列表
	 */

	private static void test05() {

		// 初始化列表及文件信息
		List<Student> listStu = new ArrayList<>();
		List<Friend> listFriend = new ArrayList<>();

		// 存储学生信息的文件
		File file = new File("src/student.txt");
		// 存储好友信息的文件
		File fileFriend = new File("src/friend.txt");

		// 读入学生数据
		listStu = SysIntial.listsALL(file);
		System.out.println("学生信息列表：");
		if (listStu != null) {
			for (Student student : listStu) {

				System.out.println(student);
			}
		}
		Friend f1 = new Friend("1001", "101300", "101301", "ye2", "Y");
		Friend f2 = new Friend("1002", "101300", "101401", "ye2", "Y");
		listFriend.add(f1);
		listFriend.add(f2);
		// 将这两条数据写到文件里
		SysIntial.saveAll(listFriend, fileFriend);
		System.out.println("保存成功");

		// 读入好友关系数据
		listFriend = SysIntial.listsALL(fileFriend);
		if (listFriend != null) {

			for (Friend friend : listFriend) {
				System.out.println(friend);
			}
		}
		System.out.println("输出成功");
	}

	/**
	 * 测试教师的功能 走流程
	 */
	private static void test04() {
		// 实例化菜单类
		Menu tMenu = new Menu();
		// 初始化数据
		// 添加数据
		Teacher teacher = Teacher.getinstance();
		// 初始化列表及文件信息
		List<Student> listStu = new ArrayList<>();
		// 存储学生信息的文件
		File file = new File("src/student.txt");

		// 读入学生数据
		listStu = teacher.listsALL(file);
		System.out.println("学生信息列表：");
		for (Student student : listStu) {

			System.out.println(student);
		}

		// 教师登录
		teacher.loginTeacher();

	}

	/**
	 * 教师登录 删除学生信息 修改学生信息
	 * 
	 * @throws Exception
	 */
	private static void test03() throws Exception {
		// 添加数据
		Teacher teacher = Teacher.getinstance();
		// 初始化列表及文件信息
		List<Student> listStu = new ArrayList<>();
		// 存储学生信息的文件
		File file = new File("src/student.txt");

		// 读入学生数据
		listStu = teacher.listsALL(file);
		System.out.println("学生信息列表：");
		for (Student student : listStu) {

			System.out.println(student);
		}

		// 教师登录
		teacher.loginTeacher();

		// 每一步增加 、修改、删除操作后面都应该保存数据到文件
		// 给链表中添加学生信息
		teacher.add(listStu);
		teacher.saveAll(listStu, file);
		// 删除学生信息
		teacher.remove(listStu);
		teacher.saveAll(listStu, file);
		// 修改学生信息
		teacher.update(listStu);
		teacher.saveAll(listStu, file);

	}

	/**
	 * 按条件查找
	 * 
	 * @throws Exception
	 */
	private static void test02() throws Exception {
		// 添加数据
		Teacher teacher = Teacher.getinstance();
		// 初始化列表及文件信息
		List<Student> listStu = new ArrayList<>();
		// 存储学生信息的文件
		File file = new File("src/student.txt");

		// 读入学生数据
		listStu = teacher.listsALL(file);
		// System.out.println("学生信息列表：");
		// for (Student student : listStu) {
		//
		// System.out.println(student);
		// }

		// 给链表中添加学生信息
		// teacher.add(listStu);

		// 条件查找
		List<Student> qList = new ArrayList<>();
		// 定义条件Map<String,Object>
		Map<String, Object> condition = new HashMap<>();
		// 接收用户输入的查询条件
		condition = teacher.searchCondition();
		// 如果条件不为空或者个数为0，根据条件进行查询
		if (condition == null || condition.size() == 0) {
			System.out.println("没有输入条件");
		} else {
			// 根据查询条件进行查找
			qList = teacher.listCondition(listStu, condition);
			// 如果查询结果不为空输出查询信息
			if (qList == null) {
				System.out.println("没有符合条件的信息");
			} else {
				System.out.println("输出学生信息列表");
				for (Student student : qList) {
					System.out.println(student);
				}
			}

		}

		// Student stu1 = new Student("10010", "111111", "userNa", 1, 18, "121212121",
		// "Address", 0);
		// listStu.add(stu1);
		// System.out.println(listStu);
		teacher.saveAll(listStu, file);
		// listStu=teacher.listsALL(file);

	}

	private static void test01() throws Exception {
		// 添加数据
		Teacher teacher = Teacher.getinstance();
		// 初始化列表及文件信息
		List<Student> listStu = new ArrayList<>();
		// 存储学生信息
		File file = new File("src/student.txt");
		// 将学生数据读入
		listStu = teacher.listsALL(file);

		teacher.add(listStu);
		// Student stu1 = new Student("10010", "111111", "userNa", 1, 18, "121212121",
		// "Address", 0);
		// listStu.add(stu1);
		// System.out.println(listStu);
		teacher.saveAll(listStu, file);
		listStu = teacher.listsALL(file);

	}

}
